/**
 * 
 */
package ec.edu.uce.erp.ejb.servicio.impl;

import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;

import org.apache.commons.collections.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import ec.edu.uce.erp.common.enums.EnumTipoTransaccion;
import ec.edu.uce.erp.common.util.EncriptacionUtil;
import ec.edu.uce.erp.common.util.SeguridadesException;
import ec.edu.uce.erp.common.util.UtilAplication;
import ec.edu.uce.erp.ejb.persistence.dao.FactoryDAO;
import ec.edu.uce.erp.ejb.persistence.dto.CredencialesDTO;
import ec.edu.uce.erp.ejb.persistence.entities.DetalleCatalogoDTO;
import ec.edu.uce.erp.ejb.persistence.entities.HistoricoTransaccioneDTO;
import ec.edu.uce.erp.ejb.persistence.entities.ModuloDTO;
import ec.edu.uce.erp.ejb.persistence.entities.ModuloMenuDTO;
import ec.edu.uce.erp.ejb.persistence.entities.UsuarioDTO;
import ec.edu.uce.erp.ejb.persistence.vo.LoginVO;
import ec.edu.uce.erp.ejb.servicio.ServicioLogin;

/**
 * @author 
 *
 */
@Stateless
public class ServicioLoginImpl implements ServicioLogin{
	
	private static final Logger slf4jLogger = LoggerFactory.getLogger(ServicioLoginImpl.class);
	
	@EJB
	FactoryDAO factoryDAO;

	@Override
	@TransactionAttribute (TransactionAttributeType.REQUIRED)
	public LoginVO autenticarUsuario(LoginVO loginVO) throws SeguridadesException {
		
		slf4jLogger.info("metodo autenticarUsuario");
		
		LoginVO loginVOUsuario = new LoginVO();
		
		try {
			
			CredencialesDTO credencialesDTO = loginVO.getCredencialesDTO();
			
			loginVOUsuario.setCredencialesDTO(loginVO.getCredencialesDTO());
			
			slf4jLogger.info("credencialesDTO.getPassword {}", credencialesDTO.getPassword());
			String claveEncriptada = EncriptacionUtil.getInstancia().encriptar(credencialesDTO.getPassword());
			slf4jLogger.info("claveEncriptada {}", claveEncriptada);
			credencialesDTO.setPassword(claveEncriptada);
			
			UsuarioDTO usuarioLogueado = factoryDAO.getUsuarioDAOImpl().obtenerPorLogin(credencialesDTO);
			
			if (usuarioLogueado != null) {
				
				usuarioLogueado.setFechaUltimoIngreso(UtilAplication.obtenerFechaActual());
				factoryDAO.getUsuarioDAOImpl().update(usuarioLogueado);
				
				loginVOUsuario.setUsuarioDTO(usuarioLogueado);
				
				//obtener los modulos del usuario
				List<ModuloDTO> modulosUsuario = factoryDAO.getModuloDAOImpl().obtenerModuloUsuario(usuarioLogueado);
				
				if (CollectionUtils.isNotEmpty(modulosUsuario)) {
					for (ModuloDTO modulo: modulosUsuario) {
						modulo.getSegtModuloMenus().size();
					}
					loginVOUsuario.setColModuloUsuario(modulosUsuario);
				}
				
				HistoricoTransaccioneDTO historicoTransacciones = new HistoricoTransaccioneDTO();
				historicoTransacciones.setNombreTransaccion(UtilAplication.appendStringBuilder(ServicioLoginImpl.class.getName(), " ", "autenticarUsuario").toString());
				historicoTransacciones.setFechaTransaccion(UtilAplication.obtenerFechaActual());
				historicoTransacciones.setDcTipoTransaccion(new DetalleCatalogoDTO());
				historicoTransacciones.getDcTipoTransaccion().setIdDetalleCatalogo(EnumTipoTransaccion.LOGIN.getId());
				historicoTransacciones.setSegtUsuario(usuarioLogueado);
				
				factoryDAO.getHistoricoTransaccioneDAOImpl().create(historicoTransacciones);
				
			}
			
		} catch (Exception e) {
			throw new SeguridadesException(e.getMessage());
		}
		
		return loginVOUsuario;
	}

	@Override
	public CredencialesDTO cambiarClaveUsuario(UsuarioDTO usuarioDTO)
			throws SeguridadesException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Boolean validarClaveUsuario(UsuarioDTO usuarioDTO)
			throws SeguridadesException {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<ModuloDTO> obtenerModulosUsuario(UsuarioDTO usuarioDTO)
			throws SeguridadesException {
		// TODO Auto-generated method stub
		return null;
	}

}
